var rd2 = Domain(
  data("About view contact info", 
    state -> specified,
    text -> "Elicitation = Interview, Specification =  Virtual Window",
    gist -> "Contact info for the developers",
    spec -> "Contact info includes company name, address, and email address",
    owner -> "design"
  ), 
  data("About view credits", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Virtual Windows",
    gist -> "About view credits",
    spec -> "Developer credits",
    owner -> "domain"
  ), 
  data("About view version info", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Virtual Windows",
    gist -> "Displays the current version of the application",
    spec -> "The product shall provide the functionality to display version information within the about screen",
    owner -> "domain"
  ), 
  data("Address", 
    state -> specified,
    text -> "Elicitation = Focus Group, Specification = Data Model",
    gist -> "Address of a location",
    spec -> "A maximum of 12 character string representing the POI address",
    owner -> "design"
  ), 
  data("Coupon applicable stores", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Data model",
    gist -> "Coupons for specific stores",
    spec -> "A coupon shall have a list of which stores they are useable in.",
    owner -> "design"
  ), 
  data("Coupon description", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Data model",
    gist -> "A string containing the coupon description.",
    spec -> "The description string has no maximum value and is stored with a TEXT type in the database. The description i used to set the parameters for the offer and give a more detaild explaination of the offer.",
    owner -> "design"
  ), 
  data("Coupon expiration", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Data model",
    gist -> "Date when coupon expires",
    spec -> "The coupon shall have a attribute that shows when it expires.",
    owner -> "design"
  ), 
  data("Coupon title", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Data model",
    gist -> "A string containing the coupon title.",
    spec -> "The title is a string with a maximum of 128 chars stat is used to catch the users attention and also give a brief introduction to what the coupon offer is about.",
    owner -> "design"
  ), 
  data("Coupon usage count", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Counts the number of use",
    spec -> "The coupon has a attribute showing the number of times it has been used.",
    owner -> "design"
  ), 
  data("Coupon usage limit", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Data model",
    gist -> "Limit the number of times a coupon is used",
    spec -> "The coupon has an attribute showing how many times it can be used.",
    owner -> "design"
  ), 
  data("Distance", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requierment",
    gist -> "Distance from user location to location",
    spec -> "Distance between two locations in meters represented by a long value.",
    owner -> "design"
  ), 
  data("Error code", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Each error should have a error code.",
    spec -> "There should exist a unique error code identification for each error as to describe said error.",
    owner -> "design"
  ), 
  data("Error description", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Screenshots",
    gist -> "Description of an error",
    spec -> "A string representing a short descrption of the occured error",
    owner -> "design"
  ), 
  data("Error description") has (quality("Errors without code")), 
  data("Map directions distance", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Virtual Windows",
    gist -> "Distance from user location to location",
    spec -> "Distance between two locations in meters represented by a long value.",
    owner -> "design"
  ), 
  data("Map pin colour", 
    state -> specified,
    text -> "Elicitation = Interview, Specification = Data Model",
    gist -> "A company specific map pin color",
    spec -> "A struct containing 3  integers representing red, green and blue with values ranging between 0 and 255.  A fourth value representing the opacity is also included as a double value between 0 and 1. This color is company specific and is used for further branding of the application.",
    owner -> "design"
  ), 
  data("Mean rating value", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Mean value of POI ratings.",
    spec -> "All ratings for said POI divided by the number of ratings shown as number between 0-5 with one decimal precision."
  ), 
  data("News image", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Screenshot",
    gist -> "An image containing the news",
    spec -> "The news image is suppoes to include both images and text designed and provided by the company.",
    owner -> "design"
  ), 
  data("News image") enables (quality("News image size")), 
  data("News url ", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Context Diagram",
    gist -> "A url to the company news page",
    spec -> "The news view image shall contain a URL to the company news page.",
    owner -> "design"
  ), 
  data("OS identifier", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "An identifier used when sending developer feedback and error messages",
    spec -> "Includes description of both version and OS type represented as a UTF8 encoded string.",
    owner -> "design"
  ), 
  data("Open hours", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Virtual Windows",
    gist -> "Opening hours of a POI",
    spec -> "Hours open specified as two integers representing the opening and closing time in seconds.",
    owner -> "design"
  ), 
  data("POI pin type", 
    state -> specified,
    text -> "Elicitation = Document studies, Specification = Data Model",
    gist -> "Specific pin type for POIs",
    spec -> "Represented as an integer which is used to distinguish the POI pin type.",
    owner -> "design"
  ), 
  data("POI popup view Icon", 
    state -> specified,
    text -> "Elicitation = Similar companies, Specification = Screenshots",
    gist -> "An icon placed on the far left in a POI popup view",
    spec -> "A icon with a size of 32x32 pixels for a retina display, otherwise 16x16 pixels. The icon is placed on the far left in a popup view",
    owner -> "design"
  ), 
  data("QR code", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Data model",
    gist -> "Coupons registered with QR code",
    spec -> "The coupons should have a QR code.",
    owner -> "design"
  ), 
  data("Rating", 
    why -> "Ratings might be hurtful for specific stores",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Numerical rating 0-5",
    spec -> "A rating of a POI specified as a integer with a  value of 0-5.",
    owner -> "design"
  ), 
  data("Reviews", 
    why -> "Reviews might be hurtful for specific stores",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Reviews of a location",
    spec -> "The reviews are anonoymous personal description of a store and are stored as a maximum of 255 character array.",
    owner -> "design"
  ), 
  data("Sharing statistics", 
    state -> specified,
    text -> "Elicitation = Interview, Specification = Feature requirements",
    gist -> "Statistics of sharing",
    spec -> "Statistics of how many times the user has shared a specific location.",
    owner -> "product"
  ), 
  data("Timestamp", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specifcation =  Screenshots",
    gist -> "the error message should contain a timestamp when the error occurred",
    spec -> "A long containing the amount of milliseconds since 01-01-1970.",
    owner -> "design"
  ), 
  data("Title", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Data Model",
    gist -> "The name of the location",
    spec -> "A string containing the name of the POI.",
    owner -> "design"
  ), 
  data("Title") enables (quality("Title length")), 
  data("Usage statistics", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Usage statistics",
    spec -> "The amount of searches, shares, POI taps, reviews, ratings, where the product was used, how the product was used and when the product was used.",
    owner -> "product"
  ), 
  data("Usage statistics") has (data("Sharing statistics")), 
  data("User pin type", 
    state -> specified,
    text -> "Elicitation = Document studies, Specification = Data Model",
    gist -> "Specific pin type for the users location",
    spec -> "A constant integer of value 1 named kUserPinType.",
    owner -> "design"
  ), 
  feature("About view", 
    state -> specified,
    text -> "Elicitation = Similar Companies, Specification = Task Description",
    gist -> "Information about the developers and the application",
    spec -> "The application should contain an about screen that contains information about the development team and the application.",
    owner -> "domain"
  ), 
  feature("Alert message") has (feature("Version message"),feature("Error message"),feature("Network message"),quality("Alerts written in English"),feature("Rate message")), 
  feature("Alert messages", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specifcation = Context Diagram",
    gist -> "The application can alert the user through different types of messages",
    spec -> "The product shall support different methods of notifying the user using dialog boxes.",
    owner -> "domain",
    prio -> 5
  ), 
  feature("Blacklisted", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Filters by blacklist",
    spec -> "The product shall support filtering out all blacklisted  locations.",
    prio -> 0
  ), 
  feature("Bookmark", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Feature requierment",
    gist -> "The main bookmark feature",
    spec -> "The main feature encapsulating the bookmark related features",
    owner -> "product"
  ), 
  feature("Cancelable POI fetch", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Feature requirements",
    gist -> "It should be possible to cancel POI fetching",
    spec -> "The product shall provide a way for the user to abort a POI fetch while waiting for it to finish. This is done by simply swithching tab",
    owner -> "design"
  ), 
  feature("Category", 
    gist -> "Filters by category",
    spec -> "The product shall support filtering by using categories as search criteria.",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements"
  ), 
  feature("Check-in", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "The application allows the user to check-in through Facebook",
    spec -> "The product shall support Facebook check-ins that include a user specific location.",
    owner -> "product"
  ), 
  feature("Coupon", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "The application will have functionality for special offers through a coupon system",
    spec -> "The product shall provide a way for the product consumer to communicate special coupon offers to the user.",
    owner -> "product"
  ), 
  feature("Developer feedback", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Context Diagram",
    gist -> "A user can give feedback to developers",
    spec -> "The product shall support the user sending feedback directly to the developers in charge of maintainance",
    owner -> "product"
  ), 
  feature("Developer feedback") enables (quality("Feedback read")), 
  feature("E-mail", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Support sharing of POIs through email",
    spec -> "The product shall support sharing of POIs using e-mail templates",
    owner -> "product"
  ), 
  feature("Error margin radius", 
    state -> specified,
    text -> "Elicitation = Focus group, Specification = Task Description",
    gist -> "Shows the error margin",
    spec -> "The  GPS error margin, shown as a circle.",
    owner -> "product"
  ), 
  feature("Error message", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Context Diagram",
    gist -> "Gives an alert to an error occuring",
    spec -> "The product shall support showing error messages to the user through the use of dialog boxes",
    owner -> "domain"
  ), 
  feature("Error message") has (data("Timestamp"),data("Error code"),data("Error description"),data("OS identifier"),feature("Execution time error"),quality("Error response time"),feature("Notify developers")), 
  feature("Execution time error", 
    why -> "Only network calls can timeout",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "If a phone function times out an error is displayed",
    spec -> "The system shall show an error message when phone function execution time exceeds execution time limit.",
    owner -> "domain"
  ), 
  feature("Execution", 
    why -> "dropped due to bad train of thought when elicitated",
    state -> dropped,
    gist -> "Requirements related to the execution",
    spec -> "The product shall limit the execution of functions and features as specified by quality requirements labeled under Execution",
    owner -> "product"
  ), 
  feature("Facebook message wall", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Ability to write a message about the POI on a wall",
    spec -> "The application should be able to let the user write a message including a POI on the walls of Facebook.",
    owner -> "product"
  ), 
  feature("Facebook message", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Send a facebook message including a POI",
    spec -> "Send a facebook message to a friend including a google maps url pointing to the specified POI.",
    owner -> "product"
  ), 
  feature("Filer") has (feature("Filter radius"),feature("Filter bookmarks"),feature("Filter open hours")), 
  feature("Filter bookmarks", 
    state -> created,
    text -> "Elicitation = Brainstorming, Specification =  Feature requirements",
    gist -> "It should be possible to filter by bookmarks",
    spec -> "It should be possible to only display POIs that has been bookmarked by the user. When using this filter, all POIs that are not bookmarked will be hidden.",
    owner -> "design",
    prio -> 3
  ), 
  feature("Filter open hours", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification =  Feature requirements",
    gist -> "Filter stores by opening hours",
    spec -> "The user should be able to specify a filter which make the map view only show stores which are open between specified hours.",
    owner -> "design",
    prio -> 4
  ), 
  feature("Filter radius", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification =  Feature requirements",
    gist -> "It should be possible to filter by radius",
    spec -> "It should be possible to only display POIs within a specified radius. The user decides on a radius (for instance by using a scroll wheel) resulting in an update of which POIs are displayed.",
    owner -> "design",
    prio -> 4
  ), 
  feature("Filter radius") has (quality("Maximum radius")), 
  feature("Filter", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Filtering of the results is possible",
    spec -> "The application provides different alternatives for filtering the results. The user can decide on different filters and when a new filter is selected, the displayed results are updated accordingly.",
    owner -> "product"
  ), 
  feature("From specified location", 
    why -> "Functionality covered by other requirements",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Gives directions to a Point Of Interest from a specified location, perhaps different from the users current position.",
    spec -> "If the user has specified a location on the map, then directions to a Point Of Interest should optionally originate from this specified location instead of the user\'s current location.",
    owner -> "design",
    prio -> 1
  ), 
  feature("Google+ integration", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Featuer requirements",
    gist -> "The application should be able to have interactivity with google+",
    spec -> "Future releases of the application should support features in google+ that are similar to those supported for facebook",
    owner -> "domain"
  ), 
  feature("Google+ message", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Send a google+ message including a POI",
    spec -> "Send a google+ message including the google map url to a specific POI to a friend",
    owner -> "product"
  ), 
  feature("Hybrid map view", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Map can be displayed as a hybrid view",
    spec -> "The map view should be able to display a map combining the normal map view and satellite view.",
    owner -> "domain"
  ), 
  feature("Hybrid map view") has (quality("Map correct overlap")), 
  feature("Info view", 
    state -> created,
    text -> "Elicitaion = Similar Companies, Specification = Virtual Windows",
    gist -> "The Info view contains the information for a POI",
    spec -> "An info view which is linked to a Map pin and contains all the information related to the corresponding POI. This includes the name of the POI, the address and open hours. The Info view also contains the necessary means for getting directions to the POI and sharing the POI.",
    owner -> "design"
  ), 
  feature("Introduction tutorial", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitation = Brainstorming",
    gist -> "An introductory tutorial for first-time users",
    spec -> "The first time the user starts the application an introductory tutorial explaining the features of the program is given."
  ), 
  feature("Launch screen", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "A screen that is displayed during startup of the application",
    spec -> "Shown when the user has started the application and is waiting for the application to load, a launch screen is displayed.",
    owner -> "domain"
  ), 
  feature("Map arrow", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Arrow pointing to locations rendered on top of the map view",
    spec -> "There should be functionality to display arrows that point to POIs outside of the current displayed area of the map",
    owner -> "product"
  ), 
  feature("Map arrow") has (feature("Transform to a map pin"),quality("Map arrow size"),function("Map arrow shows distance")), 
  feature("Map compass", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "A compass showing directions",
    spec -> "The product shall provide a compass showing the users direction in relation to the direction of the earth\'s poles.",
    owner -> "product"
  ), 
  feature("Map pin", 
    state -> specified,
    text -> "Elicitation = Document studies, Specification = Screenshots",
    gist -> "A pin rendered on the map that marks a location.",
    spec -> "Map pins are used to mark the locations of Points Of Interest on the map. There should be functionality to render map pins on top of the rendered map.",
    owner -> "domain"
  ), 
  feature("Map pin") has (data("Map pin colour"),feature("POI popup"),data("POI pin type"),function("POI popup"),feature("Tapable map pin")), 
  feature("Map support", 
    state -> specified,
    text -> "Elicitation = Document studies, Specification = Feature requierments",
    gist -> "Map features",
    spec -> "This is the main feature of the map part of the application.",
    owner -> "domain"
  ), 
  feature("Map support") enables (function("Show map"),feature("Map view")), 
  feature("Map support") has (function("Fetch POIs"),feature("Cancelable POI fetch")), 
  feature("Map view directions", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Gives the user directions from user\'s location to the specified POI",
    spec -> "The product shall provide directions for the user from their current location to a user specified POI.",
    owner -> "product",
    prio -> 4
  ), 
  feature("Map view directions") has (data("Map directions distance")), 
  feature("Map view", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Context Diagram",
    gist -> "The map view retrieved from Google Maps",
    spec -> "The map view should be retrieved by the application from Google Maps through the Google API.",
    owner -> "domain"
  ), 
  feature("Map view") enables (feature("Zoomable map view"),feature("Sattelite map view"),feature("Map pin"),feature("Map view directions"),feature("User location"),feature("Hybrid map view"),feature("Map arrow"),feature("Map compass"),feature("Panable map view"),feature("Regular map view")), 
  feature("Map view") has (quality("Maximum pins"),quality("Maximum arrows")), 
  feature("Network message", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Should inform the user of the status of the network",
    spec -> "The application should show an alert message to the user when encountering a network error.",
    owner -> "domain"
  ), 
  feature("Network message") has (feature("Network timeout"),feature("No Internet connection"),feature("No data traffic"),feature("No server connection")), 
  feature("Network timeout", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Show alert message on time out",
    spec -> "The system shall show an alert message informing the user when a network function has timed out.",
    owner -> "domain"
  ), 
  feature("News page control", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Screenshot",
    gist -> "Indicates and controls multiple news images",
    spec -> "There should be functionality for having multiple news with a page control wich indicates which of the news is being shown, and how many other news there is.",
    owner -> "design"
  ), 
  feature("News page", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specefication = Task Description",
    gist -> "The main news wrapper",
    spec -> "This object wraps an image view with its corresponding news url, this object aslo handles news page taps, and launches the appropriate url.",
    owner -> "product"
  ), 
  feature("News", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requierments",
    gist -> "A screen that gives the user news about the franchise",
    spec -> "There should be functionality for displaying a news screen with updates about the application specific franchise.",
    owner -> "product"
  ), 
  feature("No Internet connection", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Show alert message when no internet connection",
    spec -> "The system shall show an alert message informing the user when internet connection is unavailable.",
    owner -> "domain"
  ), 
  feature("No data traffic", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Show alert message when no data traffic",
    spec -> "The system shall show an alert message informing the user when data traffic is disabled.",
    owner -> "domain"
  ), 
  feature("No server connection", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Show alert message when no server connection",
    spec -> "The system shall show an alert message informing the user when connection to the data server is lost.",
    owner -> "domain"
  ), 
  feature("Notify developers", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Context Diagram",
    gist -> "The user can notify the developers of an occurred error",
    spec -> "The system shall provide the user with an option to forward error messages to the developers.",
    owner -> "product"
  ), 
  feature("Notify developers") enables (quality("Error report read")), 
  feature("POI changeable icon", 
    gist -> "Pins should have customizable icon",
    state -> dropped,
    text -> "Elicitation = Brainstorming"
  ), 
  feature("POI popup", 
    state -> specified,
    text -> "Elicitation = Negotiation, Specification = Screenshot",
    gist -> "Shows information about a selected POI",
    spec -> "When a user selects a POI a small popup with information about the locations name, address, rating, and distance. It also shows a customisable icon and a button wich loads an info view cointaing POI info. ",
    owner -> "product",
    prio -> 5
  ), 
  feature("Panable map view", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requierments",
    gist -> "The map view should be panable",
    spec -> "The user can pan the map by using a 1 finger swipe gesture.",
    owner -> "product",
    prio -> 5
  ), 
  feature("Pin types", 
    state -> specified,
    text -> "Elicitation = Focus group, Specification = Data model",
    gist -> "There should exist more than one type of pins.",
    spec -> "There should exist support for the system to allow the existence of more than one kind of pin type.",
    owner -> "domain"
  ), 
  feature("Pin types") has (data("User pin type"),data("POI pin type")), 
  feature("Push notification", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Context Diagram",
    gist -> "Application can send push notifications (iOS SPECIFIC)",
    spec -> "The application should, when run in an iOS enviroment, make use of the push notification feature for updates and new coupon offers",
    owner -> "domain"
  ), 
  feature("Rate message", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Alerts the user to rate the application",
    spec -> "The application should alert the user to rate the application when the user start the application more than 30 days after the first use of the application.",
    owner -> "product"
  ), 
  feature("Rating", 
    gist -> "Filter by ratings",
    spec -> "The application rating filter should only allow the user to view ratings which are within an interval that start at a rating between 0-5 and ends at the rating 5.",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requierments"
  ), 
  feature("Regular map view", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Support for a regular map view",
    spec -> "The system shall support viewing of a regular map view provided by google maps.",
    owner -> "domain"
  ), 
  feature("Retake tutorial", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "The introductory tutorial should be retakeable",
    spec -> "There should be an option for re-taking the introductionary tutorial."
  ), 
  feature("SMS integration", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Spedcification = Feature requirements",
    gist -> "Support for sharing a POI via SMS",
    spec -> "Allow the user to send a Google Maps URL a specific POI through SMS.",
    owner -> "product"
  ), 
  feature("Satellite map view", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Map can be displayed as a satellite view",
    spec -> "The user should be able to use the map view to see the map as the satellite view map supplied by the Google API. ",
    owner -> "domain"
  ), 
  feature("Scaling map arrow", 
    state -> specified,
    text -> "Elicitation = Focus group, Specification = Virtual Window",
    gist -> "Arrows should scale depending on distance.",
    spec -> "The arrows that point towards the POI should change their size depending on the distance between the user and the POI. If the distance grow, the arrow should also grow in size. If the distance get smaller between the user and the POI, the arrows should get smaller.",
    owner -> "design",
    prio -> 2
  ), 
  feature("Sharing support", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Support for sharing statistics and POIs",
    spec -> "The system shall support the user sharing statistics and POIs.",
    owner -> "product"
  ), 
  feature("Specifiable location", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "The user location can be specified",
    spec -> "A new location of the user can be specified by the user through the graphical user interface.",
    owner -> "product",
    prio -> 2
  ), 
  feature("Tapable map pin", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Pins are tapable",
    spec -> "Pins seen on the map view can be tapped by the user so the user can access more information of said pin.",
    owner -> "product"
  ), 
  feature("Transform to a map pin", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Transforms arrow into a map pin",
    spec -> "The system shall remove direction arrows and replace them with pins when the POI enters the map view port.",
    owner -> "design"
  ), 
  feature("Twitter", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Share POIs on twitter",
    spec -> "The system shall support sharing POIs using a twitter tablet.",
    owner -> "product"
  ), 
  feature("User location", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Show the location of the user",
    spec -> "The system shall show the users location on the map.",
    owner -> "domain",
    prio -> 5
  ), 
  feature("User location") has (data("User pin type"),feature("Speciable location"),feature("Error margin radius")), 
  feature("Version message", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Context Diagram",
    gist -> "Notify the user when new version is available",
    spec -> "Notify the user via an alert message when there is a new version of the application is available. The alert sheet provides 2 options, 1: Take the user to the appstore via an appstore url. 2: Dismiss the alert sheet via a cancel button.",
    owner -> "product"
  ), 
  feature("View bookmark", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Show the corresponding POI info view",
    spec -> "Shows the Bookmarks corresponding info view",
    owner -> "product"
  ), 
  feature("Viewability toggle", 
    why -> "Replaced by distance filter.",
    state -> dropped,
    text -> "Elicitation = Interview, Specification = Feature requirements",
    gist -> "Visibility of radius can be toggled",
    spec -> "The system shall provide an option to toggle if the radius used while filtering should be visible or not."
  ), 
  feature("Zoomable map view", 
    why -> "",
    state -> "specified",
    text -> "Elicitation = Similar Companies, Specification = Context Diagram",
    gist -> "The user should be able to zoom in and out in the map view",
    spec -> "The user should be able to zoom in and out using a pinch gesture with two fingers",
    owner -> "domain"
  ), 
  function("Bookmark POI", 
    state -> specified,
    text -> "Elicitation = Similar Companies, Specification = Feature requierments",
    gist -> "The users can bookmark POIs",
    spec -> "The user can bookmark a POI by tapping the bookmark button in the info view",
    owner -> "product"
  ), 
  function("Copy location", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Able to copy selected location",
    spec -> "The product shall provide a way for the user to copy the coordinates of a location to the clipboard.",
    owner -> "domain"
  ), 
  function("Fetch POIs", 
    state -> specified,
    text -> "Elicitation = Negotiation, Specification = Context Diagram",
    gist -> "Fetches nearby points of interest from server.",
    spec -> "Sends a request to the server asking for the POIs and then converts the JSON encoded response to POIs.",
    owner -> "product",
    prio -> 5
  ), 
  function("Hide coupon", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Hide an unwanted cuopon",
    spec -> "The user shall be able to hide coupons that they don\'t like to view.",
    owner -> "product"
  ), 
  function("Map arrow shows distance", 
    state -> specified,
    text -> "Elicitation = Interview, Specification = Screenshots",
    gist -> "The arrows should show the distance from the user to the location",
    spec -> "At each of the arrows that point towards a POI a distance from the user to said POI is written when tapped.",
    owner -> "product",
    prio -> 2
  ), 
  function("POI popup") has (data("POI popup view icon")), 
  function("Remove bookmark", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Favourites should be removable",
    spec -> "The application should allow the user to remove, and thereby delete, favourites, through the graphical user interface..",
    owner -> "product"
  ), 
  function("Show POIs", 
    state -> "specified",
    text -> "Elicitation = Similar Companies, Specification = Screenshots",
    gist -> "Shows POIs according to the user defined filter",
    spec -> "Shows all the POIs that are allowed to be seen by the user specified filter",
    owner -> "product",
    prio -> 5
  ), 
  function("Show hidden coupons", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Show which coupons have been hidden",
    spec -> "The user shall be able to view a list of all available coupons that are currently hidden.",
    owner -> "product"
  ), 
  function("Show map", 
    state -> specified,
    text -> "Elicitation = Document Studies, Specification = Feature requirements",
    gist -> "Shows a map",
    spec -> "Shows, by default, a regular map view. This map view contains POIs matching the userdefined filters. The map view also shows distance arrows and the users current location along with it\'s error margin.",
    owner -> "domain",
    prio -> 5
  ), 
  function("Show map") enables (function("Show POIs")), 
  function("Tapable news", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "The news image should be tapable",
    spec -> "When the user taps a news image, the news url is executed and the default webbrowser is loaded with the news url.",
    owner -> "design"
  ), 
  function("Unhide hidden coupon", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Unhide a coupon",
    spec -> "The user shall be able to unhide a coupon if they want to view it again.",
    owner -> "product"
  ), 
  function("Use coupon", 
    state -> specified,
    text -> "Elicitation = Task demonstration, Specification = Task Description",
    gist -> "Use a coupon ",
    spec -> "The user shall be able to use a coupon provided by the system in a store.",
    owner -> "product"
  ), 
  goal("Consumer popularity", 
    state -> specified,
    text -> "Elicitation = Task demonstration",
    gist -> "Increase popularity of consumer company",
    spec -> "The application should increase the popularity of the consumer company. This is achieved mainly through the functionality of sharing Points of Interest through social media and traditional messaging. The coupon functionality will also help in achieving this goal.",
    owner -> "goal"
  ), 
  goal("Customiseable application", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requierments ",
    gist -> "The application will be customisable",
    spec -> "The product shall support a multitude of customisation options for both the product consumer and user.",
    owner -> "product"
  ), 
  goal("Customizable application", 
    state -> specified,
    text -> "Elicitation = Task demonstration",
    gist -> "The application should be customizable",
    spec -> "The consumer should be able to customize the application to tailor it to their needs. ",
    owner -> "goal"
  ), 
  goal("OS support", 
    state -> specified,
    text -> "Elicitation = Document studies, Feature requirements",
    gist -> "Mobile OS support",
    spec -> "The application should be able run both android and iOS.",
    owner -> "domain"
  ), 
  goal("OS support") has (quality("Support for iOS"),quality("Support for Android")), 
  goal("Profitable", 
    state -> specified,
    text -> "Elicitation = Task demonstration",
    gist -> "The application should be profitable",
    spec -> "The consumer companies should feel they get some value from buying this application. This will lead to an increased popularity of the application, which in turn results in more sales for the product owner.",
    owner -> "goal"
  ), 
  goal("Sufficient error feedback", 
    state -> specified,
    text -> "Elicitation = Task demonstration",
    gist -> "Inform the user about errors",
    spec -> "Keep the user informed of the state of the application and any errors that may have occured.",
    owner -> "goal"
  ), 
  quality("Alerts written in English", 
    why -> "We assume that most of our target users will understand English and thus assigned the application to use English.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Should be written in English",
    spec -> "Text provided by the system in alert messages should be presented in English.",
    owner -> "design"
  ), 
  quality("Apple human guidelines", 
    why -> "These guidelines should be followed to make the product available on Apple Appstore",
    text -> "Elicitation = Documentation Studies",
    gist -> "The application should follow the Apple iOS Human interface guidelines",
    spec -> "The guidelines are located at http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/Introduction/Introduction.html",
    owner -> "domain"
  ), 
  quality("Application resume rigidity", 
    why -> "A rigidity when resuming usage from suspension is vital for the user experience.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Resume without error in most of the cases",
    spec -> "When the system resumes usage from suspension it should do so without error in 99\\\\% of the times.",
    owner -> "design",
    prio -> 5
  ), 
  quality("Buffer overflow attack prevention", 
    gist -> "The system should prevent buffer overflow attacks",
    spec -> "The system should not allow the user to preform buffer overflow attacks via user sent strings. A civil engineer with 5 years of experience should not be able to perform buffer overflow attacks with the application within 5 hours.",
    owner -> "design",
    text -> "Elicitation = Brainstorming, Specification = Feature requirements"
  ), 
  quality("EULA", 
    state -> specified,
    text -> "Elicitation = Brainstorming Specification = Feature requirements",
    gist -> "End User License Agreement",
    spec -> "The application should display the End User License Agreement on the first start-up. It should also contain this information elsewhere for future reference",
    owner -> "domain"
  ), 
  quality("EULA") has (quality("Google API License")), 
  quality("Easy map view access", 
    gist -> "The map view should be easy to access",
    spec -> "9 out of 10 users should be able to get to the map view within 3 taps upon application launch.",
    text -> "Elicitation = Document studies, Specification = Feature requirements"
  ), 
  quality("Error report read", 
    why -> "Too maintain the quality of the application when updates are made, it\'s important to read the feedback from the users.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "The developers should read the error reports",
    spec -> "The error reports should be read in at least 50\\\\% of the times by the maintainers, as long as the application is maintained.",
    owner -> "domain"
  ), 
  quality("Error response time", 
    why -> "If error messages does not appear fast enough the user will not relate it to what they were doing.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Errors when they happen",
    spec -> "When the system encounters an error it should display a error message no later than 3 seconds later in 95\\\\% of the time.",
    owner -> "design",
    prio -> 3
  ), 
  quality("Errors without code", 
    why -> "The user will likely not understand how to avoid the error if the error message includes code lines. And even if it just contains just some code the user will most likely not read it.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Error messages without programming code",
    spec -> "Error messages should describe what is wrong in English text without using programming code.",
    owner -> "design"
  ), 
  quality("Execution rigidity", 
    why -> "A product that does not crash too much is very important from a user point of view.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = QUPER",
    gist -> "Upper limit of number of crashes during use",
    spec -> "The application should be able to complete its defined tasks without crashing in 99\\\\% of the time. Se the Task chapter.",
    owner -> "design",
    prio -> 5
  ), 
  quality("Execution time limit", 
    why -> "If executions take too long time the user will get impatient and eventually stop using the application.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = QUPER",
    gist -> "Upper limit on the execution time",
    spec -> "The execution time of the internet based tasks, such as fetching POIs, should not exceed 1 minute before timing out.",
    owner -> "design"
  ), 
  quality("Facebook guidelines", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "The program should have access to Facebook API",
    spec -> "Follows http://developers.facebook.com/docs/beta/opengraph/tutorial/ as to gain access to the Facebook API for developers.",
    owner -> "domain"
  ), 
  quality("Google API License", 
    why -> "To enable the application using google map views it needs to contain the Google API EULA",
    state -> specified,
    text -> "Elicitation = Document studies, Specification = Feature requirements",
    gist -> "Contains the license agreement for Google API",
    spec -> "The End User License Agreement contains the license agreement for use of the Google API",
    owner -> "domain"
  ), 
  quality("Image resolution", 
    why -> "The user must have a clear view of all images.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Should be of high resolution",
    spec -> "The images displayed in the application shall be of high enough resolution to be supported by retina displays. Eg twice the normal resolution",
    owner -> "design",
    prio -> 4
  ), 
  quality("JSON", 
    why -> "To enable use of the available JSON framework that aids in getting the information quick enough. It will also minimize the size of each package.",
    state -> specified,
    text -> "Elicitation = Document studise, Specification = Context Diagram",
    gist -> "JSON encoded data",
    spec -> "All data packages fetched from the server should be JSON encoded. ref: http://code.google.com/p/json-framework/",
    owner -> "product"
  ), 
  quality("Map arrow size", 
    why -> "Limiting the size arrows is needed to prevent the screen to be cluttered.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Map arrows should not be too large",
    spec -> "The maximum size of a map arrows shall be limited to 48x48 pixels",
    owner -> "design"
  ), 
  quality("Map correct overlap", 
    why -> "The hybrid view will combine two map views and to reduce confusion they should be correctly placed upon each other.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "A hybrid map should be correctly displayed",
    spec -> "The roads on the hybrid view should be placed correctly on top of the satellite image of them.",
    owner -> "domain"
  ), 
  quality("Maximum arrows", 
    why -> "Avoiding a cluttered screen is important for the user to apprehend the information available in the application.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Limit how many arrows are shown",
    spec -> "A maximum of 5 arrows may be shown at any given time.",
    owner -> "design"
  ), 
  quality("Maximum bookmarks", 
    why -> "The system must support a 100 enty list of favourites.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Task Description",
    gist -> "Can store max 100 locations",
    spec -> "The system should be able to store a list of max 100 favourite locations.",
    owner -> "design"
  ), 
  quality("Maximum pins", 
    why -> "Avoiding a cluttered screen is important for the user to apprehend the information available in the application.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshots",
    gist -> "Limit how many pins that are shown",
    spec -> "A maximum of 50 pins may be shown at any given time.",
    owner -> "design",
    prio -> 2
  ), 
  quality("Maximum radius", 
    why -> "If the radius is increased too much the screen will be filled by pins obstructing the users view of the map",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Screenshotss",
    gist -> "Upper limit of radius set to 100km",
    spec -> "The user should not be able to expand the radius filter to show more than a 100km radius.",
    owner -> "design",
    prio -> 1
  ), 
  quality("Network timeout", 
    why -> "It\'s unacceptable to wait more than 1 minute for a network request to complete.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Network requests should have a timeout",
    spec -> "Network request should timeout when they have been pending for 1 minute.",
    owner -> "design"
  ), 
  quality("News image size", 
    why -> "The news image should fit the image container",
    state -> specified,
    text -> "Elicitation = Documentation studies, Specification = Screenshot",
    gist -> "Define the size of news image",
    spec -> "The news image should be exactly 300x360 pixel points.",
    owner -> "design"
  ), 
  quality("Radius visibility", 
    why -> "Replaced by distance filter.",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "The radius should be visible to most users.",
    spec -> "When the radius is shown it should be visible to at least 78\\\\% of all users."
  ), 
  quality("Startup time", 
    why -> "If the application takes too long time to start a user will be annoyed.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = QUPER",
    gist -> "Upper limit on application startup",
    spec -> "The launch screen should not be displayed for longer than 30 seconds in 95\\\\% of uses.",
    owner -> "design"
  ), 
  quality("Support for Android", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Application works under Android OS",
    spec -> "The system shall be convertable to function on the Android OS platform.",
    owner -> "product",
    prio -> 5
  ), 
  quality("Support for iOS", 
    state -> specified,
    text -> "Elicitation = Brainstorming, Specifications = Feature requirements",
    gist -> "Application works under iOS",
    spec -> "The application shall function on the Apple iOS5 platform.",
    owner -> "product",
    prio -> 5
  ), 
  quality("Title length", 
    why -> "The max length is so it should fit in a 128 char array in the database.",
    state -> specified,
    text -> "Elicitation = Focus Group, Specefication = Context Diagram",
    gist -> "The title length should be limited",
    spec -> "The Title should have a maximum length of 255 chars."
  ), 
  quality("Tutorial coverage", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitatiom = Brainstorming, Specification = Feature requierments",
    gist -> "Should include most of the product features",
    spec -> "The tutorial should instruct the user on how to use at least 80\\\\% of the available features."
  ), 
  quality("Tutorial in English", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature erquierments",
    gist -> "Should be understood by a mixed English speaking focus group",
    spec -> "At least 80\\\\% of the users must be able to understand the text written in the tutorial."
  ), 
  quality("Tutorial time efficient", 
    why -> "dropped by product owner",
    state -> dropped,
    text -> "Elicitation = Brainstorming, Specification = Feature requierments",
    gist -> "Should be able to complete the tutorial within a set time",
    spec -> "The tutorial must be completed within 2 minutes by at least 70\\\\% of the users."
  ), 
  quality("XSS filtering", 
    gist -> "All user sent strings should be XSS filtered",
    spec -> "All user sent strings should be XSS filtered, this is to prevent MySQL injection. A civil engineer with 5 years of experience should be unable to execute a MySQL injection within 5 hours.",
    owner -> "domain",
    text -> "Elicitation = Brainstorming, Specificaton = Feature requierments"
  ), 
  quality("iOS appstore guidelines", 
    why -> "The application should be listed on Apple App Store to increase availability.",
    state -> specified,
    text -> "Elicitation = Brainstorming, Specification = Feature requirements",
    gist -> "Follows the guidelines of the iOS appstore",
    spec -> "The product that is specified for iOS must meet the standard requirements specified by the Apple App Store guidelines found here http://developer.apple.com/appstore/guidelines.html",
    owner -> "domain"
  ), 
  subtask("Bookmark location", 
    spec -> "Add location to bookmarks list"
  ), 
  subtask("Dismiss the alert message", Attr()
  ), 
  subtask("Fetch coupons", 
    spec -> "Fetch coupons from server via https"
  ), 
  subtask("Fetch news from server", 
    spec -> "Fetch news from server via https"
  ), 
  subtask("Fetch stored bookmarks", 
    spec -> "Load bookmarks list"
  ), 
  subtask("Filter POIs", 
    spec -> "Remover the pins that doesn\'t meet the filter criteria"
  ), 
  subtask("Load bookmarks list", Attr()
  ), 
  subtask("Load new map", 
    spec -> "Load the previously requested map"
  ), 
  subtask("Mark pin as bookmark", 
    spec -> "Change the pin icon to a star"
  ), 
  subtask("Open coupon", 
    spec -> "A user opens the coupon from coupon view by tapping it"
  ), 
  subtask("Process result", 
    spec -> "Process the https response from the server"
  ), 
  subtask("Remove bookmark from list", Attr()
  ), 
  subtask("Remove bookmark from local storage", Attr()
  ), 
  subtask("Remove launch screen", 
    spec -> "Fades out the launchscreen when application initialization has finished"
  ), 
  subtask("Request new map", 
    spec -> "Requests new map from google with the specified terrain"
  ), 
  subtask("Retrieve alert message", Attr()
  ), 
  subtask("Reverse geocode active location", 
    spec -> "Ask Google for information about the active location"
  ), 
  subtask("Select sharing method", 
    spec -> "An action sheet is revealed containing the different sharing methods"
  ), 
  subtask("Send fetch request", 
    spec -> "Sends a fetch request with the active location via https to server."
  ), 
  subtask("Share POI", 
    spec -> "Perform sharing the selected sharing method"
  ), 
  subtask("Show POIs", 
    spec -> "Place a pin on the map for each POI fitting the user defined filter"
  ), 
  subtask("Show alert popup", Attr()
  ), 
  subtask("Show bookmark", Attr()
  ), 
  subtask("Show brief information.", Attr()
  ), 
  subtask("Show complete information", Attr()
  ), 
  subtask("Show complete information.", Attr()
  ), 
  subtask("Show coupons", 
    spec -> "Show formatted http response from server"
  ), 
  subtask("Show default tab", 
    spec -> "Initializes and shows the default application tab specifyed by the customer"
  ), 
  subtask("Show hidden coupons", 
    spec -> "Shows all coupons that the user has selected to hide from the normal view."
  ), 
  subtask("Show info", 
    spec -> "Shows Version number of the application, credits about the developers and contact information to the developers"
  ), 
  subtask("Show launch screen", 
    spec -> "Shows the launch screen until application initialization is finished"
  ), 
  subtask("Show news", 
    spec -> "Shows the formatted http response from the server"
  ), 
  subtask("Show reults", 
    spec -> "Show fetched POIs in the map view"
  ), 
  task("Application startup", 
    critical -> "None.",
    purpose -> "Start the application and make it ready to use",
    frequency -> "1 time per application use",
    trigger -> "Precondition: Application is not running. Trigger: User taps the application icon"
  ), 
  task("Application startup") has (subtask("Show launch screen"),subtask("Remove launch screen"),subtask("Show default tab")), 
  task("Change map terrain", 
    critical -> "None.",
    purpose -> "Let the user change the map terrain in the map view",
    frequency -> "An average of 3 timer per application use",
    trigger -> "Precondition: Map view is loaded and not conducting a search. Trigger: User chooses another terrain"
  ), 
  task("Change map terrain") has (subtask("Request new map"),subtask("load new map")), 
  task("Fetch Points Of Intrest (POI)", 
    critical -> "None since a fetch is cancelable",
    purpose -> "Fetch POIs from server",
    frequency -> "An average of 5 times per application use",
    trigger -> "Trigger 1: User requests the map view. Trigger 2: User sets a different active location."
  ), 
  task("Fetch Points Of Intrest (POI)") has (subtask("Reverse geocode location"),subtask("Send fetch request"),subtask("Process result"),subtask("Show results")), 
  task("Filter POIs", 
    critical -> "None.",
    purpose -> "Let the user filter POIs.",
    frequency -> "An average of 5 times per application use",
    trigger -> "User chooses a filter and its parameters"
  ), 
  task("Filter POIs") has (subtask("Filter POIs")), 
  task("Mark location as bookmark", 
    critical -> "Max 100 locations as bookmarks",
    purpose -> "Let the user have easy access to bookmarked locations.",
    frequency -> "An average of 1 time per application use.",
    trigger -> "Precondition: A more specific information view is loaded. Trigger: The user taps the add to bookmarks button"
  ), 
  task("Mark location as bookmark") has (subtask("Bookmark location"),subtask("Mark pin as bookmark")), 
  task("Remove a bookmark", 
    critical -> "None.",
    purpose -> "Let the user remove a previously set bookmark",
    frequency -> "A maximum of 1 time per bookmark",
    trigger -> "Precondition: The bookmarks list is loaded. Trigger: the user swipes from right to left on the table view cell."
  ), 
  task("Remove a bookmark") has (subtask("Remove bookmark from list"),subtask("Remove bookmark from local storage")), 
  task("Share POI", 
    critical -> "None.",
    purpose -> "Let the user share the selected POI.",
    frequency -> "An average of 5 times per application use.",
    trigger -> "Precondition: The more info view is loaded. Trigger: The user taps the share button"
  ), 
  task("Share POI") has (subtask("Select sharing method"),subtask("Share POI")), 
  task("Show Fetched POIs") has (subtask("Show POIs")), 
  task("Show a bookmark", 
    critical -> "None.",
    purpose -> "Let the user access a bookmark\'s information from the bookmarks list.",
    frequency -> "An average of 2 times per application use.",
    trigger -> "Precondition: The bookmarks list is loaded. Trigger: The user taps the table view cell."
  ), 
  task("Show a bookmark") has (subtask("Show bookmark")), 
  task("Show about view", 
    critical -> "None.",
    purpose -> "Show information about the application and its developers.",
    frequency -> "An average of 1 time per application use",
    trigger -> "User taps the about button."
  ), 
  task("Show about view") has (subtask("Show info")), 
  task("Show alert message", 
    critical -> "None.",
    purpose -> "Show an alert message.",
    frequency -> "An average of 3 times per application use.",
    trigger -> "Trigger: The an alert message is pushed to the message stack"
  ), 
  task("Show alert message") has (subtask("Retrieve alert message"),subtask("Show alert message"),subtask("Dismiss alert message")), 
  task("Show bookmarks list", 
    critical -> "None.",
    purpose -> "Let the user browse previously set bookmarks.",
    frequency -> "An average of 2 times per application launch",
    trigger -> "User taps the bookmarks tab"
  ), 
  task("Show bookmarks list") has (subtask("Fetch stored bookmarks")), 
  task("Show coupon view", 
    critical -> "None.",
    purpose -> "Let the application owner give application users application specific coupons.",
    frequency -> "An average of 2 timer per application use",
    trigger -> "The coupon tab is tapped"
  ), 
  task("Show coupon view") has (subtask("Fetch coupons"),subtask("Show coupons")), 
  task("Show fetched POIs", 
    critical -> "None.",
    purpose -> "Show filtered POIs",
    frequency -> "An average of 10 times per application use.",
    trigger -> "Precondition: Application has fetched POIs. Trigger 1: POI Fetch finishes. Trigger 2: User changes map view. Trigger 3: User sets a different active location. Trigger 4: User changes filter parameters"
  ), 
  task("Show news view", 
    critical -> "None.",
    purpose -> "Let the application owner show news to the application users.",
    frequency -> "An average of 1 time per application use",
    trigger -> "The news view is loaded"
  ), 
  task("Show news view") has (subtask("Fetch news from server"),subtask("Show news")), 
  task("Show pin information", 
    critical -> "None.",
    purpose -> "Show brief information about the selected POI and gives the abillity to show more specific information.",
    frequency -> "An average of 10 times per application use.",
    trigger -> "Precondition: Map pins are visible on the map view. Trigger: The user taps the map pin."
  ), 
  task("Show pin information") has (subtask("Show brief information."),subtask("Show complete information.")), 
  task("Show specific information") has (subtask("Show complete information")), 
  task("Show specific pin information", 
    critical -> "None.",
    purpose -> "Show specifig information about the selected POI.",
    frequency -> "An average of 2 times per application use",
    trigger -> "Precondition: Brif pin information is shown. Trigger: User taps the more information button."
  ), 
  task("Unhide a hidden coupon", 
    critical -> "None.",
    purpose -> "Unhide a coupon that has been previously marked as hidden so that the user can see and use it from the coupon view again.",
    frequency -> "Less then once per application use.",
    trigger -> "Precondition: The user is currently in the view showing hidden coupons and atleas one coupon is marked as hidden. Trigger: User taps the unhide button of the coupon."
  ), 
  task("Unhide a hidden coupon") has (subtask("Show hidden coupons")), 
  task("Use a coupon", 
    critical -> "The coupon has more uses left.",
    purpose -> "A user can use the coupon at a store to get special offers.",
    frequency -> "Less then once per application use.",
    trigger -> "Precondition: A coupon is open for use, Trigger: The user holds up the phone to a QR reader in the store wich reads the coupon QR image"
  ), 
  task("Use a coupon") has (subtask("Open coupon"))
)
